//package indi.gao.file.web;
//
//import cn.hutool.core.collection.ConcurrentHashSet;
//import cn.hutool.core.date.DateUtil;
//import com.alibaba.fastjson.JSONObject;
//import com.mashape.unirest.http.HttpResponse;
//import com.mashape.unirest.http.JsonNode;
//import com.mashape.unirest.http.Unirest;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.http.client.HttpClient;
//import org.apache.http.conn.ssl.NoopHostnameVerifier;
//import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.ssl.SSLContextBuilder;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import sun.net.util.IPAddressUtil;
//
//import javax.net.ssl.SSLContext;
//import java.net.InetAddress;
//import java.net.UnknownHostException;
//import java.security.cert.X509Certificate;
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * @author :gaolei
// * @version :v1.0
// * @projectName :GLUtil
// * @description :
// * @createDate :2022/3/10 6:04 下午
// */
//@Slf4j
//public class Tickethttp {
//
//    public static ConcurrentHashSet<String> concurrentHashSet = new ConcurrentHashSet<>();
//    public static ConcurrentHashSet<String> successSet = new ConcurrentHashSet<>();
//    public static final long dayLong = 24*60*60*1000;
//    public static HashMap<String, String> authorizations = new HashMap<>();
//
//    static {
//        authorizations.put("G", "ZWViNTQ3ODEtMDIxMi00YzczLWI3OTUtMTFhMmExOGZlZjM5LDE2NDk2ODM1NDQyNzQsUW9xQ3VhOVJRVjBZcjFQa25DaHh3VlhnazZjPQ==");
//        authorizations.put("L", "NDc4ZmYyNjQtNjc1YS00OWFlLWIzYmEtNGI5YTc1YzcyZjdmLDE2NDk4MTEyMjA4MjQsOVdJVEYvWVVqMDN3cFhjYlVoL1Bwc0hocTFVPQ==");
//    }
//
//
//    public static void main(String[] args) {
//        new Thread(() -> {
//            while (true) {
//                long gap = getGap(12);
//                try {
//                    soutLog("预约："+gap);
//                    Thread.sleep(gap);
//                    // 获取今天12点的时间
//                    snatch();
//                    flushTicket();
//                } catch (InterruptedException e) {
//                    soutLog("预约执行失败");
//                }
//            }
//        }).start();
//
//        new Thread(() -> {
//            while (true) {
//                long gap = getGap(20);
//                try {
//                    soutLog("预约："+gap);
//                    Thread.sleep(gap);
//                    // 获取今天12点的时间
//                    snatch();
//                    flushTicket();
//                } catch (InterruptedException e) {
//                    soutLog("预约执行失败");
//                }
//            }
//        }).start();
//
//        new Thread(() -> {
//            while (true) {
//                long gap = getGap(7);
//                try {
//                    Thread.sleep(gap);
//                    soutLog("清除预约状态："+gap);
//                    // 获取今天12点的时间
//                    successSet.clear();
//                } catch (InterruptedException e) {
//                    soutLog("清除预约状态失败");
//                }
//            }
//        }).start();
//    }
//
//
//    public static void flushTicket() {
//        Date date1 = new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
//        String yyMMdd1 = DateUtil.format(date1, "yyyyMMdd");
//        JsonNode message = null;
//        try {
//            Thread.sleep(2000);
//            message = getMessage(yyMMdd1);
//            List<TimeSlot> timeSlots = JSONObject.parseArray(message.toString(), TimeSlot.class);
//            List<String> collect = timeSlots.stream().map(x ->x.getTimeSlotQueryString().split("-")[2]+ x.getTimeSlotQueryString().split("-")[3]+ "   余量：" + x.getBalance() + "\n").collect(Collectors.toList());
//            // 刷新票信息
//            StringBuilder stringBuilder = new StringBuilder();
//            for (String s : collect) {
//                stringBuilder.append(s);
//            }
//            soutLog(stringBuilder.toString());
//        } catch (Exception e) {
//            DingUtil.sendMessage(JSONObject.toJSONString(e));
//        }
//    }
//
//
//    public static long getGap(int timeNode) {
//
//        Calendar c = Calendar.getInstance();
//        c.set(Calendar.HOUR_OF_DAY, timeNode);
//        c.set(Calendar.MINUTE, 0);
//        c.set(Calendar.SECOND, 0);
//        c.set(Calendar.MILLISECOND, 0);
//        Date time = c.getTime();
//
//        // 现在距离timeNode点的时间
//        Long gap = System.currentTimeMillis() - time.getTime();
//
//        if (gap > 0) {
//            // 启动时间已经过了
//            // 获取距离明天12点的时间
//            c.add(Calendar.DAY_OF_YEAR, 1);
//            gap = c.getTime().getTime() - System.currentTimeMillis();
//        } else {
//            gap = -gap;
//        }
//        return gap;
//    }
//
//    public static void snatch() {
//        soutLog("开始抢票");
//        // 生成预约日期
//        Date date1 = new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000);
//        String yyMMdd1 =DateUtil.format(date1, "yyyyMMdd");
//        String[] timeSlotList = {"0740-0750","0750-0800"};
//
//        authorizations.forEach((k, v) -> new Thread(()->{
//            if (successSet.size() == 0 || !successSet.contains(k)) {
//                for (String timeSlot : timeSlotList) {
//                    boolean ticket = false;
//                    try {
//                        ticket = getTicket(yyMMdd1, timeSlot, v, k);
//                    } catch (Exception e) {
//                       log.info(JSONObject.toJSONString(e));
//                    }
//                    if (ticket) {
//                        successSet.add(k);
//                        return;
//                    }
//                }
//            }
//        }).start());
//        try {
//            Thread.sleep(5000L);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        StringBuilder stringBuilder = new StringBuilder();
//        for (String s : concurrentHashSet) {
//            stringBuilder.append(s).append("\n");
//        }
//        soutLog(stringBuilder.toString());
//    }
//
//    public static void soutLog(String logS) {
//        String hostAddress = "";
//        try {
//             hostAddress = InetAddress.getLocalHost().getHostName();
//        } catch (UnknownHostException e) {
//            e.printStackTrace();
//        }
//        final String   temp = "服务器:"+ hostAddress+ "\n时间戳: "+new Date().getTime()+"\n"+logS;
//
//        new Thread(() -> {
//            DingUtil.sendMessage(temp);
//            log.info(temp);
//        }).start();
//    }
//
//    public static boolean getTicket(String enterDate, String timeSlot, String authorization, String who) throws Exception {
//        boolean success;
//        Appointment appointment = createAppointment(enterDate, timeSlot, authorization);
//        String messageTicket;
//        if (appointment.getBalance() == -1) {
//            messageTicket = who + "-抢票失败：" + timeSlot;
//            success = false;
//        } else {
//            messageTicket = who + "-抢票成功：" + timeSlot + "入口：" + appointment.getStationEntrance();
//            success = true;
//        }
//        concurrentHashSet.add(messageTicket);
//        Thread.sleep(800);
//        return success;
//    }
//
//    public static JsonNode getMessage(String yyMMdd1) throws Exception {
//
//        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy() {
//            public boolean isTrusted(X509Certificate[] chain, String authType) {
//                return true;
//            }
//        }).build();
//        HttpClient customHttpClient = HttpClients.custom().setSSLContext(sslContext)
//                .setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
//        Unirest.setHttpClient(customHttpClient);
//        HttpResponse<JsonNode> response = Unirest.post("https://webapi.mybti.cn/Appointment/GetBalance")
//                .header("Host", "webapi.mybti.cn")
//                .header("Connection", "keep-alive")
////                .header("Content-Length", "87")
//                .header("Pragma", "no-cache")
//                .header("Cache-Control", "no-cache")
//                .header("Accept", "application/json, text/plain, */*")
//                .header("Origin", "https://webui.mybti.cn")
//                .header("User-Agent", "Mozilla/5.0 (Linux; Android 5.0.2; vivo X5Pro D Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 YiTongXing/5.0.9")
//                .header("Content-Type", "application/json;charset=UTF-8")
//                .header("x-wap-profile", "http://218.249.47.94/Xianghe/MTK_LTE_Phone_KK_UAprofile.xml")
//                .header("Authorization", "ZWViNTQ3ODEtMDIxMi00YzczLWI3OTUtMTFhMmExOGZlZjM5LDE2NDk2ODM1NDQyNzQsUW9xQ3VhOVJRVjBZcjFQa25DaHh3VlhnazZjPQ==")
//                .header("Referer", "https://webui.mybti.cn/")
//                .header("Accept-Encoding", "gzip,deflate")
//                .header("Accept-Language", "zh-CN,en-US;q=0.8")
//                .header("X-Requested-With", "enfc.metro")
//                .body("{\"timeSlot\":\"0630-0930\",\"stationName\":\"沙河站\",\"enterDates\":[\"" + yyMMdd1 + "\"]}")
//                .asJson();
//
////        if (status)
//        JsonNode body = response.getBody();
//        return body;
//    }
//
//    public static Appointment createAppointment(String enterDate, String timeSlot, String authorization) throws Exception {
//
//        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy() {
//            public boolean isTrusted(X509Certificate[] chain, String authType) {
//                return true;
//            }
//        }).build();
//        HttpClient customHttpClient = HttpClients.custom().setSSLContext(sslContext)
//                .setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
//        Unirest.setHttpClient(customHttpClient);
//        HttpResponse<String> response = Unirest.post("https://webapi.mybti.cn/Appointment/CreateAppointment")
//                .header("Host", "webapi.mybti.cn")
//                .header("Connection", "keep-alive")
////                .header("Content-Length", "87")
//                .header("Pragma", "no-cache")
//                .header("Cache-Control", "no-cache")
//                .header("Accept", "application/json, text/plain, */*")
//                .header("Origin", "https://webui.mybti.cn")
//                .header("User-Agent", "Mozilla/5.0 (Linux; Android 5.0.2; vivo X5Pro D Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 YiTongXing/5.0.9")
//                .header("Content-Type", "application/json;charset=UTF-8")
//                .header("x-wap-profile", "http://218.249.47.94/Xianghe/MTK_LTE_Phone_KK_UAprofile.xml")
//                .header("Authorization", authorization)
//                .header("Referer", "https://webui.mybti.cn/")
//                .header("Accept-Encoding", "gzip,deflate")
//                .header("Accept-Language", "zh-CN,en-US;q=0.8")
//                .header("X-Requested-With", "enfc.metro")
//                .body("{\"lineName\":\"昌平线\",\"snapshotWeekOffset\":0,\"stationName\":\"沙河站\",\"enterDate\":\"" +
//                        enterDate +
//                        "\",\"snapshotTimeSlot\":\"0630-0930\",\"timeSlot\":\"" +
//                        timeSlot +
//                        "\"}")
//                .asString();
//        int status = response.getStatus();
//        if (status != 200) {
//            throw new RuntimeException(JSONObject.toJSONString(response));
//        }
//        String body1 = response.getBody();
//        log.info("body" + JSONObject.toJSONString(response));
//        return JSONObject.parseObject(body1, Appointment.class);
//    }
//
//    public static class Appointment {
//        Integer balance;
//        String appointmentId;
//        String stationEntrance;
//
//        public Integer getBalance() {
//            return balance;
//        }
//
//        public void setBalance(Integer balance) {
//            this.balance = balance;
//        }
//
//        public String getAppointmentId() {
//            return appointmentId;
//        }
//
//        public void setAppointmentId(String appointmentId) {
//            this.appointmentId = appointmentId;
//        }
//
//        public String getStationEntrance() {
//            return stationEntrance;
//        }
//
//        public void setStationEntrance(String stationEntrance) {
//            this.stationEntrance = stationEntrance;
//        }
//    }
//
//    static class TimeSlot {
//        String timeSlotQueryString;
//        Integer balance;
//        String appointmentId;
//        Integer status;
//
//        public String getTimeSlotQueryString() {
//            return timeSlotQueryString;
//        }
//
//        public void setTimeSlotQueryString(String timeSlotQueryString) {
//            this.timeSlotQueryString = timeSlotQueryString;
//        }
//
//        public Integer getBalance() {
//            return balance;
//        }
//
//        public void setBalance(Integer balance) {
//            this.balance = balance;
//        }
//
//        public String getAppointmentId() {
//            return appointmentId;
//        }
//
//        public void setAppointmentId(String appointmentId) {
//            this.appointmentId = appointmentId;
//        }
//
//        public Integer getStatus() {
//            return status;
//        }
//
//        public void setStatus(Integer status) {
//            this.status = status;
//        }
//    }
//}